package greentycoon.gui;

import greentycoon.batiment.Batiment;
import greentycoon.batiment.Habitation;
import greentycoon.batiment.CentreRecyclage.CentreRecyclageDechetUsuel;
import greentycoon.batiment.centrale.*;
import greentycoon.batiment.decharge.CentreEnfouissementTechnique;
import greentycoon.batiment.decharge.DechargeACielOuvert;
import greentycoon.main.VariablesGlobales;
import greentycoon.ville.Conteneur;
import greentycoon.ville.Ville;

import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class MainPanel extends JPanel implements MouseListener {
	private static final long serialVersionUID = 8118613888911123443L;
	private static Ville ville;
	private BufferedImage imageDeFond;
	private boolean majPresed = false;

	public MainPanel(Ville ville){
		this.ville = ville;
		addMouseListener(this);
		try {
			imageDeFond = ImageIO.read(new File("src/greentycoon/gui/map.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	 public void paintComponent(Graphics g)
	    {
         
	            g.drawImage(imageDeFond, 0, 0, null);
	          
	    }
	        
	@Override
	public void mouseClicked(MouseEvent e) {
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
			boolean constructible = true;
		
			/*On verifie qu'on a assez d'argent*/
			if(VariablesGlobales.choixBatiment.equals("centraleCharbon") && VariablesGlobales.argent-CentraleCharbon.prix<0 ||
		    	VariablesGlobales.choixBatiment.equals("centraleEolienne") && VariablesGlobales.argent-CentraleEolienne.prix<0 ||
		    	VariablesGlobales.choixBatiment.equals("centraleNucleaire") && VariablesGlobales.argent-CentraleNucleaire.prix<0 ||
		    	VariablesGlobales.choixBatiment.equals("centralePhotovoltaique") && VariablesGlobales.argent-CentralePhotovoltaique.prix<0||
		    	VariablesGlobales.choixBatiment.equals("dechargeACielOuvert") && VariablesGlobales.argent-DechargeACielOuvert.prix<0 ||
		    	VariablesGlobales.choixBatiment.equals("CentreEfouissementTechnique") && VariablesGlobales.argent-CentreEnfouissementTechnique.prix<0 ||
		    	VariablesGlobales.choixBatiment.equals("centreRecyclageUsuel") && VariablesGlobales.argent-CentreRecyclageDechetUsuel.prix<0)
				
			{
				VariablesGlobales.choixBatiment="";
			}
		if(!VariablesGlobales.choixBatiment.equals(""))
		{
			int posX = (int) (e.getPoint().getX()/VariablesGlobales.TAILLE_CASE_X);
			int posY = (int) (e.getPoint().getY()/VariablesGlobales.TAILLE_CASE_Y);
			
		for(Batiment[] blist : ville.getBatimentTab())
		{
		
			for(Batiment b : blist)
			{
				/*On verifie que rien n'est deja construit*/
				if(b != null &&
					posX>b.getPosX()-b.getSizeX() &&
			    	posX<b.getPosX()+b.getSizeX() &&
			    	posY>b.getPosY()-b.getSizeY() &&
			    	posY<b.getPosY()+b.getSizeY()){
					
					constructible = false;

				}
				
			}
		}
		
		if(constructible)
		{
		construireBatiment(e.getPoint());
		}

		if(e.getButton()==MouseEvent.BUTTON1)
		{
		VariablesGlobales.choixBatiment = "";
		}
		
		}
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	
	protected void construireBatiment(Point posCurseur) {

			int posX = (int) (posCurseur.getX()/VariablesGlobales.TAILLE_CASE_X);
			int posY = (int) (posCurseur.getY()/VariablesGlobales.TAILLE_CASE_Y);
		if(VariablesGlobales.choixBatiment.equals("centraleCharbon"))
		{		
			ville.addBatiment(new CentraleCharbon(posX, posY));
			ville.changeArgentValue(-CentraleCharbon.prix);

		}else if (VariablesGlobales.choixBatiment.equals("centraleEolienne")){
			ville.addBatiment(new CentraleEolienne(posX, posY));
			ville.changeArgentValue(-CentraleEolienne.prix);
			
		}else if (VariablesGlobales.choixBatiment.equals("centraleNucleaire")){
			ville.addBatiment(new CentraleNucleaire(posX, posY));
			ville.changeArgentValue(-CentraleNucleaire.prix);
			
		}else if (VariablesGlobales.choixBatiment.equals("centralePhotovoltaique")){
			ville.addBatiment(new CentralePhotovoltaique(posX, posY));
			ville.changeArgentValue(-CentralePhotovoltaique.prix);
			
		}else if (VariablesGlobales.choixBatiment.equals("dechargeACielOuvert")){
			ville.addBatiment(new DechargeACielOuvert(posX, posY));
			ville.changeArgentValue(-DechargeACielOuvert.prix);
			
		}else if (VariablesGlobales.choixBatiment.equals("CentreEnfouissementTechnique")){
			ville.addBatiment(new CentreEnfouissementTechnique(posX, posY));
			ville.changeArgentValue(-CentreEnfouissementTechnique.prix);
			
		}else if (VariablesGlobales.choixBatiment.equals("centreRecyclageUsuel")){
			ville.addBatiment(new CentreRecyclageDechetUsuel(posX, posY));
			ville.changeArgentValue(-CentreRecyclageDechetUsuel.prix);
		}
		
		
	}

	
	

}
